﻿// Inner Kit 通用工具库
// 字符串操作
//
// Copyright (c) 2025 by 尔西大帝. All rights reserved.
//
// 用于字符串操作的一些快捷方式
//
// Author: 尔西大帝
// Email: 2670613871@qq.com
// Created: 2025-04-14

#pragma once

#include <string>

namespace ikit {
constexpr const char* EMPTY_TEXT = "";
constexpr std::string_view EMPTY_STRING(EMPTY_TEXT);
constexpr const char* ENABLE_STRING = "Enable";
constexpr const char* DISABLE_STRING = "Disable";
constexpr const char* ON_STRING = "ON";
constexpr const char* OFF_STRING = "OFF";
constexpr const char* TRUE_STRING = "TRUE";
constexpr const char* FALSE_STRING = "FALSE";


/*
 * 字符串功能
 */
// 比较字符串，不区别大小写。返回true为一样，false为不一样。没有比大小的功能。
inline bool str_equal(const char* s1, const char* s2) {
  return _stricmp(s1, s2) == 0;
}
// 比较字符串，不区别大小写（返回0 = 一样，其它是大小）。
int strcasecmp(const char* s1, const char* s2);
// 复制一个字符串（会重新分配内存）
char* str_copy(const char* str);
// 将utf-8的字符串转为GBK（这东西被C++17弃用了）
std::string utf8_to_gbk(const std::string_view& utf8_str);
std::string gbk_to_utf8(const std::string_view& gbk_str);
// 将一个string转化为wstring
std::wstring to_wide(const std::string_view& str);
// 将一个wstring转化为string
std::string from_wide(const std::wstring_view& str);
// 如果为TRUE，返回"ON"字符串，否则返回"OFF"字符串
const char* onoff(bool is_on);
// 如果为TRUE，返回"TRUE"字符串，否则返回"FLASE"字符串
const char* truefalse(bool is_true);
// 如果为TRUE，返回第一个字符串，否则返回第2个
const char* pick(bool is_true, const char* true_text, const char* false_text);
// 将一个项目拆分为两个字符串，
std::pair<std::string_view, std::string_view> split_element(
    const std::string& str, char delimiter = ':');
// 对行尾进行变换，将\n换成\r\n（这个在EditText中才能换行）。
std::string replace_with_CrLf(const std::string& input);
// 查找一个字符串，如果失败，返回-1
int index_of(const char* text, const char* substr);


} // namespace ikit